#ifndef __RECKON__ISTOPWATCH_H__
#define __RECKON__ISTOPWATCH_H__

#include "includes.h"

namespace reckon {

	class IStopWatch
	{
	public:
		enum Type
		{
			seconds,
			milliseconds,
			microseconds,
			nanoseconds,
		};

	public:
		virtual void initTime() = 0;

		virtual f64 spanTime() = 0;

		virtual f64 totalSpanTime(bool bCallSpanTime = true) = 0;

	protected:
		IStopWatch() {}
	public:
		virtual ~IStopWatch() {}
	};
	
	typedef boost::shared_ptr<IStopWatch> StopWatch;


	namespace util {

		RECKON_API StopWatch createStopWatch(IStopWatch::Type sw_type = IStopWatch::seconds);

	} // namespace reckon::util

} // namespace reckon

#endif // 